﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using DingApi.Models;
using System.Data;

using System.IO;

using System.Web;
using Dingding.Helper;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NCommon;
 

namespace DingApi.Controllers
{
    [RoutePrefix("api/Dcxa11a")]
    public class Dcxa11aController : ApiController
    {   

        [HttpPost]
        [Route("PostDcxa11_inq")]


        public System.Data.DataSet PostDcxa11_inq([FromBody]  JObject obj)
        {
            EI.EIInfo inBlock = new EI.EIInfo();

            string BRANCH_CODE = obj["BRANCH_CODE"] == null ? " " : obj["BRANCH_CODE"].ToString();
            string STOCK_CHAR = obj["STOCK_CHAR"] == null ? " " : obj["STOCK_CHAR"].ToString();
            string STOCK_NO = obj["STOCK_NO"] == null ? " " : obj["STOCK_NO"].ToString();
            string PROD_CODE = obj["PROD_CODE"] == null ? " " : obj["PROD_CODE"].ToString();
            string SG_SIGN = obj["SG_SIGN"] == null ? " " : obj["SG_SIGN"].ToString();
            string MAT_SPEC_DESC = obj["MAT_SPEC_DESC"] == null ? " " : obj["MAT_SPEC_DESC"].ToString();
            string PONO_NO = obj["PONO_NO"] == null ? " " : obj["PONO_NO"].ToString();
            string LOT_NO = obj["LOT_NO"] == null ? " " : obj["LOT_NO"].ToString();
            string MAT_NO = obj["MAT_NO"] == null ? " " : obj["MAT_NO"].ToString();

            string QUAL_GRADE_CODE = obj["QUAL_GRADE_CODE"] == null ? " " : obj["QUAL_GRADE_CODE"].ToString();
            string HOLD_CAUSE_CODE = obj["HOLD_CAUSE_CODE"] == null ? " " : obj["HOLD_CAUSE_CODE"].ToString();
            string HOLD_MAKER = obj["HOLD_MAKER"] == null ? " " : obj["HOLD_MAKER"].ToString();
            string REC_CREATE_TIME = obj["REC_CREATE_TIME"] == null ? " " : obj["REC_CREATE_TIME"].ToString();
            string REC_REVISE_TIME = obj["REC_REVISE_TIME"] == null ? " " : obj["REC_REVISE_TIME"].ToString();


            string page_no = obj["PAGE_NO"] == null ? " " : obj["PAGE_NO"].ToString();
            string page_size = obj["PAGE_SIZE"] == null ? " " : obj["PAGE_SIZE"].ToString();
            string type_inq = obj["TYPE_INQ"] == null ? " " : obj["TYPE_INQ"].ToString();

            string userid   = obj["USERID"] == null ? " " : obj["USERID"].ToString();
            string USERNAME = obj["USERNAME"] == null ? " " : obj["USERNAME"].ToString();

            string FORMNAME = obj["FORMNAME"] == null ? " " : obj["FORMNAME"].ToString();

            

            inBlock.Tables[0].Columns.Add("BRANCH_CODE");
            inBlock.Tables[0].Columns.Add("STOCK_CHAR");
            inBlock.Tables[0].Columns.Add("STOCK_NO");
            inBlock.Tables[0].Columns.Add("PROD_CODE");
            inBlock.Tables[0].Columns.Add("SG_SIGN");

            inBlock.Tables[0].Columns.Add("MAT_SPEC_DESC");
            inBlock.Tables[0].Columns.Add("PONO_NO");
            inBlock.Tables[0].Columns.Add("LOT_NO");
            inBlock.Tables[0].Columns.Add("MAT_NO");

            inBlock.Tables[0].Columns.Add("QUAL_GRADE_CODE");
            inBlock.Tables[0].Columns.Add("HOLD_CAUSE_CODE");
            inBlock.Tables[0].Columns.Add("HOLD_MAKER");
            inBlock.Tables[0].Columns.Add("REC_CREATE_TIME");
            inBlock.Tables[0].Columns.Add("REC_REVISE_TIME");



            inBlock.Tables[0].Rows.Add();
            inBlock.sys_info.company_code = "LT";
            inBlock.sys_info.userid = userid;

            inBlock.Tables[0].Rows[0]["BRANCH_CODE"] = BRANCH_CODE;
            inBlock.Tables[0].Rows[0]["STOCK_CHAR"] = STOCK_CHAR;
            inBlock.Tables[0].Rows[0]["STOCK_NO"] = STOCK_NO;
            inBlock.Tables[0].Rows[0]["PROD_CODE"] = PROD_CODE;

            inBlock.Tables[0].Rows[0]["SG_SIGN"] = SG_SIGN;
            inBlock.Tables[0].Rows[0]["MAT_SPEC_DESC"] = MAT_SPEC_DESC;
             

            inBlock.Tables[0].Rows[0]["PONO_NO"] = PONO_NO;
            inBlock.Tables[0].Rows[0]["LOT_NO"] = LOT_NO;
            inBlock.Tables[0].Rows[0]["MAT_NO"] = MAT_NO;

            inBlock.Tables[0].Rows[0]["QUAL_GRADE_CODE"]    = QUAL_GRADE_CODE;
            inBlock.Tables[0].Rows[0]["HOLD_CAUSE_CODE"]    = HOLD_CAUSE_CODE;
           
            //【钉钉前台仅查询当天，且为本人扫描的】；
            inBlock.Tables[0].Rows[0]["HOLD_MAKER"] = HOLD_MAKER;

            //1表示高级查询
            inBlock.Tables[0].Rows[0]["REC_CREATE_TIME"] = type_inq == "1" ? REC_CREATE_TIME : DateTime.Now.ToString("yyyyMMdd") + "000000";
             
            
            inBlock.Tables[0].Rows[0]["REC_REVISE_TIME"]    = REC_REVISE_TIME;




            EF.DSUtility.PageInfoDataTable PageInfo = new EF.DSUtility.PageInfoDataTable();
            PageInfo.AddPageInfoRow((int.Parse(page_no) - 1) * int.Parse(page_size), int.Parse(page_size));

            inBlock.Tables.Add("PageInfo"); //后台需要
            inBlock.Tables["PageInfo"].Merge(PageInfo);

            string svr = "paef21_inq"; ////高级查询
            if (type_inq == "1")
            {
                svr = "paef21_inq2";
            }

            svr = "pmxa11a_inq";

            inBlock.sys_info.formname = FORMNAME;//DCXA11封锁，否则为判定查询记录

            EI.EIInfo outBlock = EI.EITuxedo.CallService(svr, inBlock);

            //图片数量
            if (!(outBlock.Tables[0].Columns.Contains("FIELD_N1")))
            {
                outBlock.Tables[0].Columns.Add("FIELD_N1");
            }


            string sql_str1 = "select STOCK_NO CODE, STOCK_NAME CODE_DESC_1_CONTENT ,BRANCH_CODE  from tsimm01 where STOCK_TYPE='3'  ";

            //仓库代码转换
            EI.EIInfo outBlock_TEMP = EF.Utility.ExecQuery(sql_str1);


            //小代码转换；
            EI.EIInfo outBlock_TEMP2 = EF.Utility.GetCodeClassValue("DCX3","QMQK");


            DataTable dtTemp = null;

           
         
            for (int i = outBlock.Tables[0].Rows.Count - 1; i >= 0; i--)
            {
                string stock_no = outBlock.Tables[0].Rows[i]["STOCK_NO"].ToString().Trim();
                if (stock_no.Trim() != "")
                {
                    if (outBlock_TEMP.Tables[0].Select("CODE  = '" + stock_no + "'").Count<DataRow>() == 1)
                    {
                        dtTemp = outBlock_TEMP.Tables[0].Select("CODE  = '" + stock_no + "'").CopyToDataTable<DataRow>();
                        outBlock.Tables[0].Rows[i]["STOCK_NO"] = dtTemp.Rows[0]["CODE_DESC_1_CONTENT"];
                    }
                }


                string qual_grade_code = outBlock.Tables[0].Rows[i]["QUAL_GRADE_CODE"].ToString().Trim();
                if (qual_grade_code.Trim() != "")
                {
                    if (outBlock_TEMP2.Tables["QMQK"].Select("CODE  = '" + qual_grade_code + "'").Count<DataRow>() == 1)
                    {
                        dtTemp = outBlock_TEMP2.Tables["QMQK"].Select("CODE  = '" + qual_grade_code + "'").CopyToDataTable<DataRow>();
                        outBlock.Tables[0].Rows[i]["QUAL_GRADE_DESC"] = dtTemp.Rows[0]["CODE_DESC_1_CONTENT"];
                    }
                }

                string hold_cause_code = outBlock.Tables[0].Rows[i]["HOLD_CAUSE_CODE"].ToString().Trim();
                if (hold_cause_code.Trim() != "")
                {
                    if (outBlock_TEMP2.Tables["DCX3"].Select("CODE  = '" + hold_cause_code + "'").Count<DataRow>() == 1)
                    {
                        dtTemp = outBlock_TEMP2.Tables["DCX3"].Select("CODE  = '" + hold_cause_code + "'").CopyToDataTable<DataRow>();
                        outBlock.Tables[0].Rows[i]["HOLD_CAUSE_DESC"] = dtTemp.Rows[0]["CODE_DESC_1_CONTENT"];
                    }
                }

                string hold_time = outBlock.Tables[0].Rows[i]["HOLD_TIME"].ToString();
                if (hold_time.Length >= 12)
                    outBlock.Tables[0].Rows[i]["HOLD_TIME"] =  hold_time.Substring(4, 2) + "-" + hold_time.Substring(6, 2) + " " + hold_time.Substring(8, 2) + ":" + hold_time.Substring(10, 2);
                //hold_time.Substring(0, 4) + "-" +

                UpDownFileFtpController ctr = new UpDownFileFtpController();
                string mat_no = outBlock.Tables[0].Rows[i]["MAT_NO"].ToString();
                int files_num = ctr.PostGetFilesNum("DCXA", mat_no, "");
                outBlock.Tables[0].Rows[i]["FIELD_N1"] = files_num;


            }
            
            outBlock.Tables[0].TableName = "Table0";









            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;


        }


        [HttpPost]
        [Route("PostDcxa11_Info")]

        //单记录查询
        public System.Data.DataSet PostDcxa11_Info([FromBody]  JObject obj)
        {

             EI.EIInfo inBlock = new EI.EIInfo();
           

            //obj对象区分大小写的； obj["ASMAT_NAME"] 报错。
             string MAT_NO = obj["MAT_NO"] == null ? " " : obj["MAT_NO"].ToString();
             MAT_NO = MAT_NO.ToUpper();

             string str = " select prod_lot_no lot_no  , t.*  from TPMMM02N  t ";
             str += " where  mat_no ='" + MAT_NO  + "'   ";

             

             EI.EIInfo outBlock = EF.Utility.ExecQuery(str);

           

             if (!(outBlock.Tables[0].Columns.Contains("FIELD_N1")))
             {
                 outBlock.Tables[0].Columns.Add("FIELD_N1");
             }

            //钉钉前端判断是否【已经判定过】
             outBlock.Tables[0].Columns.Add("IF_EXIT");

             if (!(outBlock.Tables[0].Columns.Contains("HOLD_CAUSE_CODE")))
             {
                 outBlock.Tables[0].Columns.Add("HOLD_CAUSE_CODE");
             }
             if (!(outBlock.Tables[0].Columns.Contains("HOLD_REMARK")))
             {
                 outBlock.Tables[0].Columns.Add("HOLD_REMARK");
             }
            if (!(outBlock.Tables[0].Columns.Contains("QUAL_GRADE_DESC")))
            {
                outBlock.Tables[0].Columns.Add("QUAL_GRADE_DESC");
            }
            

            //后台记录前端是否【试批号的批量操作】
             outBlock.Tables[0].Columns.Add("LOT_NO_PRO");
            


             outBlock.Tables[0].TableName = "Table0";

            if (outBlock.Tables[0].Rows.Count <= 0)
            {
                outBlock.sys_info.flag = -1;
                outBlock.sys_info.msg = "材料号[" + MAT_NO + "]不存在！";
            }

            else if (outBlock.Tables[0].Rows[0]["STATUS"].ToString()=="14"  //进行驳回操作
                || outBlock.Tables[0].Rows[0]["STATUS"].ToString() == "12"  //已驳回，可进行驳回撤销操作
                )
            { 
                 outBlock.Tables[0].Rows[0]["LOT_NO_PRO"] = " ";

                //判断是否已经判定或封锁；//被驳回的材料，可以再次提交；也可再次驳回，再次驳回是修改操作
                string str1 = " select HOLD_CAUSE_CODE,HOLD_REMARK from tdcxa11 ";
                str1 += " where mat_no ='" + MAT_NO + "'  ";

                EI.EIInfo outBlock1 = EF.Utility.ExecQuery(str1);

                if (outBlock.Tables[0].Rows[0]["STATUS"].ToString()=="12" //驳回状态
                    &&outBlock1.Tables[0].Rows.Count == 1)
                {
                    outBlock.Tables[0].Rows[0]["IF_EXIT"] = "1";
                    outBlock.Tables[0].Rows[0]["HOLD_CAUSE_CODE"]   = outBlock1.Tables[0].Rows[0]["HOLD_CAUSE_CODE"].ToString();
                    outBlock.Tables[0].Rows[0]["HOLD_REMARK"]       = outBlock1.Tables[0].Rows[0]["HOLD_REMARK"].ToString();
                }
                else
                {
                    outBlock.Tables[0].Rows[0]["IF_EXIT"]           = "0";
                    outBlock.Tables[0].Rows[0]["HOLD_CAUSE_CODE"]   = "";
                    outBlock.Tables[0].Rows[0]["HOLD_REMARK"]       = "";
                }




                UpDownFileFtpController ctr = new UpDownFileFtpController();

                int files_num = ctr.PostGetFilesNum("DCXA", MAT_NO, "");
                outBlock.Tables[0].Rows[0]["FIELD_N1"] = files_num;

                EI.EIInfo outBlock_TEMP = EF.Utility.GetCodeClassValue("QMQK", "MM08","DCX3");//质量等级、质量问题分类；
               

               // outBlock.Tables.Add(outBlock_TEMP.Tables["DCX3"].Copy());


                //仓库 暂时不用，提供效率；
                //EI.EIInfo outBlock_TEMP2 = EF.Utility.ExecQuery("select t.STOCK_NO CODE ,t.stock_name as CODE_DESC_1_CONTENT from tsimm01 t where STOCK_NO='" + outBlock.Tables[0].Rows[0]["STOCK_NO"].ToString() + "'");

                //if (outBlock_TEMP2.Tables[0].Rows.Count > 0)
                //{
                //    outBlock.Tables[0].Rows[0]["STOCK_NO"] = outBlock_TEMP2.Tables[0].Rows[0]["CODE_DESC_1_CONTENT"];
                //}

                DataTable dtTemp = null;

               
                if (outBlock.Tables[0].Rows[0]["QUAL_GRADE_CODE"].ToString().Trim()!="")
                {
                    dtTemp = outBlock_TEMP.Tables["QMQK"].Select("CODE  = '" + outBlock.Tables[0].Rows[0]["QUAL_GRADE_CODE"].ToString() + "'").CopyToDataTable<DataRow>();
                    outBlock.Tables[0].Rows[0]["QUAL_GRADE_DESC"] = dtTemp.Rows[0]["CODE_DESC_1_CONTENT"];
                }

                if (outBlock.Tables[0].Rows[0]["SHIFT_GROUP"].ToString().Trim() != "")
                {
                    dtTemp = outBlock_TEMP.Tables["MM08"].Select("CODE  = '" + outBlock.Tables[0].Rows[0]["SHIFT_GROUP"].ToString() + "'").CopyToDataTable<DataRow>();
                    outBlock.Tables[0].Rows[0]["SHIFT_GROUP"] = dtTemp.Rows[0]["CODE_DESC_1_CONTENT"];
                }


                //提交为创建时间；
                string REC_REVISE_TIME = outBlock.Tables[0].Rows[0]["REC_REVISE_TIME"].ToString();
                if (REC_REVISE_TIME.Length >= 8)
                    outBlock.Tables[0].Rows[0]["REC_CREATE_TIME"] = REC_REVISE_TIME.Substring(0, 4) + "-" + REC_REVISE_TIME.Substring(4, 2) + "-" + REC_REVISE_TIME.Substring(6, 2);
             
            }
            else
            {
                outBlock.sys_info.flag = -1;
                outBlock.sys_info.msg = "材料号["+MAT_NO+"]状态不对！";
            }


            



            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;


        }

         


        [HttpPost]
        [Route("PostDcxa11_Load")]

        //高级查询的查询条件获取，【主要是各类小代码，类似之前画面的初始化参数】
        public System.Data.DataSet PostDcxa11_Load([FromBody]  JObject obj)
        {           

            //小代码转换；
            EI.EIInfo outBlock = EF.Utility.GetCodeClassValue("DCX3");

            DataRow dr1 = outBlock.Tables["DCX3"].NewRow();
            dr1["CODE"] = " ";
            dr1["CODE_DESC_1_CONTENT"] = " ";
            outBlock.Tables["DCX3"].Rows.InsertAt(dr1, 0);
             

            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;


        }


        [HttpPost]
        [Route("PostDcxa11_Save")]

        //高级查询的查询条件获取，【主要是各类小代码，类似之前画面的初始化参数】
        public System.Data.DataSet PostDcxa11_Save([FromBody]  JObject obj)
        {
            string USERID = obj["USERID"] == null ? " " : obj["USERID"].ToString();
            string USERNAME = obj["USERNAME"] == null ? " " : obj["USERNAME"].ToString();
            string FORMNAME = obj["FORMNAME"] == null ? " " : obj["FORMNAME"].ToString();
            string SRV = obj["SRV"] == null ? " " : obj["SRV"].ToString();
 
            

            DataTable table_rec = JsonConvert.DeserializeObject<DataTable>(obj["table_rec"].ToString(), new DingApi.ReadAheadDataTableConverter());;

            EI.EIInfo inBlock = new EI.EIInfo();
            inBlock.sys_info.company_code = "LT";
            inBlock.sys_info.company_name = "常熟市龙腾特种钢有限公司";

        



            inBlock.sys_info.userid     = USERID;
            inBlock.sys_info.username   = USERNAME;
            inBlock.sys_info.formname   = FORMNAME;
            
            inBlock.Tables[0].Merge(table_rec);

            //默认是INS（新增操作）
            inBlock.Tables[0].TableName = "INS";

            //修改或删除操作；
            if (SRV.Trim()!="")
            {
                inBlock.Tables[0].TableName = SRV.Trim().ToUpper();
            }


            EI.EIInfo outBlock = EI.EITuxedo.CallService("pmxa11a_save", inBlock);
             

            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
           
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;


        }

 
 
    }
}